package java0418;

//import java.util.Scanner;
//
//// 最小公倍数
//public class Main {
//    public static void main(String[] args) {
//        Scanner sc = new Scanner(System.in);
//        while (sc.hasNext()) {
//            int x = sc.nextInt();
//            int y = sc.nextInt();
//            int ret = func(x, y);
//            System.out.println(ret);
//        }
//    }
//
//    public static int func(int x, int y) {
//        int max = x > y ? x : y;
//        while (true) {
//            if (max % x == 0 && max % y == 0) {
//                return max;
//            }
//            max++;
//        }
//    }
//}


// 牛客:不要二
import java.util.Scanner;

public class Main {
    public static void main (String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            int l = sc.nextInt();
            int h = sc.nextInt();
            int ret = func(h, l);
            System.out.println(ret);
        }
    }

    public static int func(int h, int l) {
        int ret = 0;
        boolean[][] box = new boolean[h][l];
        for (int i = 0; i < h; i++) {
            for (int j = 0; j < l; j++) {
                if (isPut(i, j, box) == true) {
                    ret++;
                }
            }
        }
        return ret;
    }

    public static boolean isPut(int h, int l, boolean[][] box) {
        if (h - 2 >= 0 && box[h - 2][l] == true) {
            return false;
        }
        if (h + 2 < box.length && box[h + 2][l] == true) {
            return false;
        }
        if(l - 2 >= 0 && box[h][l - 2] == true) {
            return false;
        }
        if(l + 2 < box[0].length && box[h][l + 2] == true) {
            return false;
        }
        box[h][l] = true;
        return true;
    }
}
